#ifndef TCPSERVER_H
#define TCPSERVER_H

#include <QDialog>
#include<QTcpServer>
#include<QTcpSocket>
#include<QTime>
#include<QFileDialog>
#include<QString>
#include<QWidget>
#include<QKeyEvent>

namespace Ui {
class TcpServer;
}

class QTcpServer;
class QTcpSocket;

class TcpServer : public QDialog
{
    Q_OBJECT

public:
    explicit TcpServer(QWidget *parent = nullptr);
    ~TcpServer();

    void initServer();              // 初始化服务器

    void refused();                 // 拒绝接收文件

protected:

    void closeEvent(QCloseEvent *); // 重写关闭事件

    signals:
       void sendFileName(QString ); // 发送文件名信号

    private slots:

    void on_serverOpenBtn_clicked();

    void on_serverSendBtn_clicked();

    void on_serverCloseBtn_clicked();

    void sendMessage();              // 发送文件

    void updateClientProgress(qint64 );
private:
    Ui::TcpServer *ui;

    QTcpServer *tcpServer;              // 监听套接字
    QTcpSocket *clientConnection;       // 通信套接字
    qint16 tcpPort;                     // 端口号
    QFile *localFile ;                  // 要发送的文件

    qint64 payloadSize ;                // 每次发送数据的大小
    qint64 TotalBytes ;                 // 总共需要发送的数据大小
    qint64 bytesWritten ;               // 已经发送数据大小
    qint64 bytestoWrite;                // 剩余数据大小

    QString theFileName;                // 文件名
    QString fileName;                   // 文件路径

    QTime time;                         // 传输时间
    QByteArray outBlock;                // 数据缓冲区，即存放每次要发送的数据
};

#endif // TCPSERVER_H
